package van.planifolia.demo04;

/**
 * 泛型接口食物
 * @param <T>
 */
public interface Food<T> {
    /**
     * 获取食物的名字
     * @param name
     */
    void  getName(T name);
}

/**
 * 苹果类实现食物接口并且直接声明泛型的类型
 */
class Apple implements Food<String>{
    @Override
    public void getName(String name) {
        System.out.println("我的名字是:" + name);
    }
}

/**
 * 桃子类实现了事务接口，并没有声明泛型的类型而是继续定义了一个泛型。
 * @param <T>
 */
class Peach<T> implements Food<T>{

    @Override
    public void getName(T name) {
        System.out.println("我的名字是:" + name);
    }
}
class Test{
    public static void main(String[] args) {
        // 因为Peach类在实现的时候没有声明接口的类型所以要在创建对象的时候给他进行泛型约束
        Peach<Integer> peach = new Peach<>();
        peach.getName(123);
        // 因为在实现的时候就已经声明了接口的泛型所以就不用在声明泛型了
        Apple apple = new Apple();
        apple.getName("苹果");
    }
}
